[๐ ์ฌ์ดํด2 - ๋ฏธ์ (๋ธ๋์ญ ๋ฒ ํ )] ๋ชจ์ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#1124
[๐ ์ฌ์ดํด2 - ๋ฏธ์
(๋ธ๋์ญ ๋ฒ ํ
)] ๋ชจ์ ๋ฏธ์
์ ์ถํฉ๋๋ค.#1124picetea44 wants to merge 49 commits intowoowacourse:picetea44from
Conversation
donghoony
left a comment
There was a problem hiding this comment.
์๋ ํ์ธ์ ๋ชจ์! ์ ๋ฒ ์ฌ์ดํด์์๋ ๋๊ผ์ง๋ง ๊ฐ๋จ๋ช ๋ฃํ๊ณ ์ฝ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๊ณ์๋ค๊ณ ๋๋๋๋ค. ์ฝ๊ธฐ ์ฌ์์ ๋ฆฌ๋ทฐํ ๊ณณ์ด ์ ๋ณด์์ด์.
๋ง๊ฐ๊ธฐํ์ด ์ธ์ ๊น์ง์ธ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ฐ์ RC๋ฅผ ๋๋ ค์. ์ ํ์ ์ผ๋ก ๋ฐ์ํ ๊ฒ์ ํฌ๊ธฐ๊ฐ ์ปค์ง ์ ์์ด ๊ฐ์ด ์ด์ผ๊ธฐํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ ๊ฒ ๊ฐ์์.
์ฝ๋ฉํธ๋ก ์ด์ผ๊ธฐ ์ด์ด๋๊ฐ๋ณด์์ฃ !
|
|
||
| private final double profitRate; | ||
|
|
||
| Outcome(double profitRate) { |
There was a problem hiding this comment.
default ์์ฑ์๋ก ์์ฑํด์ฃผ์ ์ด์ ๊ฐ ์์๊น์?
| import java.util.Map; | ||
|
|
||
| public class ProfitResult { | ||
| private final Map<Player, Integer> playerProfits; |
There was a problem hiding this comment.
Player๋ฅผ ํค๋ก ์ฝ์
ํด์ฃผ์
จ๋ค์. ์์ ๊ฒ์ ์์๊น์? ๐
| int dealerProfit = 0; | ||
| for (int profit : playerProfits.values()) { | ||
| dealerProfit -= profit; | ||
| } | ||
| return dealerProfit; |
There was a problem hiding this comment.
Stream ์ฐ์ฐ์ ์ฐ์ตํด๋ณด๊ณ ์ ์ฉํด๋ณผ๊น์?
| import domain.game.Outcome; | ||
|
|
||
| public class BettingMoney { | ||
| private final int amount; |
There was a problem hiding this comment.
๋ฒ ํ ๊ธ์ก์ด ํ์๊ฐ ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
| private void validate(int amount) { | ||
| if (amount <= 0) { | ||
| throw new IllegalArgumentException("๋ฒ ํ ๊ธ์ก์ด 0์ดํ ์ผ ์ ์์ต๋๋ค."); | ||
| } | ||
| } |
There was a problem hiding this comment.
๋ธ๋์ญ์์ ์ฐ์ด๋ ๋์ ์ ๊ฒ์ฆํด์ฃผ์ จ๋ค์ ๐๐ป
| @Test | ||
| void ๋๋ฌ_์์ต์_ํ๋ ์ด์ด_์์ต_ํฉ์ฐ์_๋ถํธ_๋ฐ์ ์ด๋ค() { | ||
| Map<Player, Integer> playerProfits = new LinkedHashMap<>(); | ||
| playerProfits.put(new Player("pobi", new BettingMoney(10000)), 10000); |
There was a problem hiding this comment.
ํฐ ์์ ๋จ์๋ _๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค. 10_000์ผ๋ก ์์ฑํ๋ฉด ๊ฐ๋
์ฑ์ ๋ ์ฑ๊ธธ ์ ์๊ฒ ๋ค์!
| ์ฒ์์๋ ๊ด๋ จ ์ฑ ์์ Bet ๋๋ฉ์ธ์ ๋ชจ์ผ๋ ค๊ณ ์๊ฐํ์ต๋๋ค. ํ์ง๋ง ๊ตฌํ์ ์งํํ๋ฉด์ ํ์ ๋ก์ง, ํ๋ ์ด์ด ์ํ, ๋ฒ ํ ๊ธ์ก ๋ฑ ์ฌ๋ฌ ๋๋ฉ์ธ์ด ํจ๊ป ๊ด์ฌํ๊ฒ ๋์๊ณ , ์ด๋ ๊ฐ์ฒด์ ์ฑ ์์ ๋๋ ๊ฒ์ด ์์ฐ์ค๋ฌ์ด์ง ํ๋จํ๊ธฐ๊ฐ ์ฝ์ง ์์์ต๋๋ค. | ||
| ๊ทธ๋์ ์ฌ๋ฌ ๋ฐฉํฅ์ผ๋ก ๊ตฌ์กฐ๋ฅผ ๋ฐ๊ฟ ๋ณด๋ฉด์ ๊ณ์ ์์ ์ ์งํํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ ๊ณผ์ ์์ ํน์ ๊ฐ์ฒด๊ฐ ๋๋ฌด ๋ง์ ์ ๋ณด๋ฅผ ์๊ฒ ๋๋ ๊ตฌ์กฐ๊ฐ ๋๊ธฐ๋ ํ๊ณ , ๋ฐ๋๋ก ์ฑ ์์ด ์ง๋์น๊ฒ ๋ถ์ฐ๋๋ ๋๋๋ ์์์ต๋๋ค. | ||
| ์ฌ๋ฌ ์๋๋ฅผ ๊ฑฐ์น ๋์ ํ์ฌ ๊ตฌ์กฐ๋ฅผ ์ ํํ๊ฒ ๋์์ง๋ง, ์ด ์ ํ์ด ์ต์ ์ธ์ง์ ๋ํด์๋ ์์ง ํ์ ์ด ์์ง๋ ์์ต๋๋ค. | ||
| ์๋ฃจ๊ฐ ๋ณด์๊ธฐ์๋ ์ด ๋ฌธ์ ๋ฅผ ๊ณ ๋ฏผํ๋ ๊ณผ์ ์์ ์ ๊ฐ ๋์น๊ณ ์๋ ๋ถ๋ถ์ด ์๋์ง, ํน์ ์ด๋ฐ ์ํฉ์์ ์ฑ ์์ ์์น๋ฅผ ํ๋จํ ๋ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ ๊ทผํ์๋์ง ๊ถ๊ธํฉ๋๋ค. |
There was a problem hiding this comment.
์ฝ๋๋ฅผ ์ฝ๋๋ฐ์๋ ์ ํ ๋ถํธํ์ง ์์๊ณ , ์๊ตฌ์ฌํญ ์ถ๊ฐ์ ๋ง๊ฒ ์ ๋ฐ์ ์์ผ์ฃผ์ จ๋ค๊ณ ์๊ฐํด์. ๊ถ๊ธํ ๋ด์ฉ์ ๊ฐ ์ฝ๋ฉํธ์ ๋จ๊ฒจ๋๊ฒ ์ต๋๋ค. ๐๐ป
| ๋ฏธ์ ์ด๊ธฐ, ์ ์ฒด์ ์ธ ์ค๊ณ๊ฐ ๋จธ๋ฆฟ์์ ์๋ฒฝํ ๊ทธ๋ ค์ง์ง ์์ ์ํ์์ TDD๋ฅผ ์์ํ๋ ค๋ ์๋นํ ๋ง๋งํจ์ ๋๊ผ์ต๋๋ค. ๋์์ ๊ธฐ์ค์ผ๋ก ํ ์คํธ๋ฅผ ์์ฑํ๋ฉฐ ์ํฅ์์ผ๋ก ์ ๊ทผํ๋ ค ํ์ผ๋, ์ฌ๋ฌ ๊ฐ์ฒด๋ ๋ฉ์๋๊ฐ ๋ณต์กํ๊ฒ ์ํธ์์ฉํด์ผ ํ๋ ์ํฉ์์๋ ๊ทธ ๋์์ ๋จ์ ์์ฒด๊ฐ ๋ชจํธํ๊ฒ ๋ค๊ฐ์์ต๋๋ค. | ||
| ํ์ฌ ๊ตฌ์กฐ๋ Player โ CardBundle โ Card์ฒ๋ผ ๊ฐ์ฒด๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ๊ณ ์๋๋ฐ, ์ผ๋ถ ๋ก์ง์์ ์ด๋ฏธ Player ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ๊ณ ์์์๋ ๋ถ๊ตฌํ๊ณ CardBundle์ ์ง์ ์ ๊ทผํด ์ ์๋ฅผ ๊ณ์ฐํ๋ ์ฝ๋๊ฐ ์์์ต๋๋ค. | ||
| ์ด ๊ฒฝ์ฐ ํน์ ํด๋์ค๊ฐ ์ฌ๋ฌ ๋๋ฉ์ธ์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์๊ณ ์์ด์ผ ํ๋ค๋ ์ ์ด ๊ฑธ๋ ธ์ต๋๋ค. | ||
| ๊ทธ๋์ ์ธ๋ถ์์ CardBundle์ ์ง์ ์ ๊ทผํ๋ ๋์ , Player์๊ฒ ์ ์๋ฅผ ์์ฒญํ๊ณ Player๊ฐ ๋ด๋ถ์ ์ผ๋ก CardBundle์ ์์ํ๋ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ธ๋ถ์์๋ Player์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ ํ์๊ฐ ์์ด์ง๊ณ , ๋์ค์ ์นด๋ ๊ด๋ฆฌ ๋ฐฉ์์ด๋ ์ ์ ๊ณ์ฐ ๋ก์ง์ด ๋ฐ๋๋๋ผ๋ ๋ค๋ฅธ ๋๋ฉ์ธ์ด๋ ๋ ์ด์ด์ ๋ณ๊ฒฝ์ ์ค์ผ ์ ์์ง ์์๊น ์๊ฐํ์ต๋๋ค. |
There was a problem hiding this comment.
์ข์ ์ ๊ทผ์ด๋ค์. Tell, Don't Ask ๋ผ๋ ์ด์ผ๊ธฐ๋ ๊ฒฐ๊ตญ์๋ ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์๋ค๊ณ ์๊ฐํด์. ๋ณ๊ฒฝ๋๋ ๊ฒ๊ณผ ๊ทธ๋ ์ง ์์ ๊ฒ, ๋ณ๊ฒฝ๋๋ค๊ณ ํ๋ฉด ๊ทธ ์ ํ๋ฅผ ์ต์ํํ๋ ๋ฐฉํฅ์ ๊พธ์คํ ๊ณ ๋ฏผํด๋ณด์๋ ๊ฒ ์ข์ต๋๋ค! ์ด๋ ๋ ์ค์ํ ๊ฑด ๋ค๋ฅธ ํ์๋ค์๊ฒ ๋์ ์ฃผ์ฅ์ ์ ์ค๋ํ๋ ๋ฐฉ๋ฒ์ด๊ฒ ๋ค์.
| for (Player player : players.getGamePlayers()) { | ||
| player.addCard(deck.draw()); | ||
| private void dealInitialTwoCards(Dealer dealer, Players players, Deck deck) { | ||
| for (int i = 0; i < 2; i++) { |
There was a problem hiding this comment.
2๋ ๋ธ๋์ญ์์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ์๋ค์!
|
|
||
| import domain.game.Outcome; | ||
|
|
||
| public class BettingMoney { |
There was a problem hiding this comment.
new BettingMoney(100).equals(new BettingMoney(100))์ ๊ฒฐ๊ณผ๋ ์ด๋ค๊ฐ์?
์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?์ด๋ค ๋ถ๋ถ์ ์ง์คํ์ฌ ๋ฆฌ๋ทฐํด์ผ ํ ๊น์?
ํ์ฌ ๊ตฌ์กฐ๋ Player โ CardBundle โ Card์ฒ๋ผ ๊ฐ์ฒด๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ๊ณ ์๋๋ฐ, ์ผ๋ถ ๋ก์ง์์ ์ด๋ฏธ Player ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ๊ณ ์์์๋ ๋ถ๊ตฌํ๊ณ CardBundle์ ์ง์ ์ ๊ทผํด ์ ์๋ฅผ ๊ณ์ฐํ๋ ์ฝ๋๊ฐ ์์์ต๋๋ค.
์ด ๊ฒฝ์ฐ ํน์ ํด๋์ค๊ฐ ์ฌ๋ฌ ๋๋ฉ์ธ์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์๊ณ ์์ด์ผ ํ๋ค๋ ์ ์ด ๊ฑธ๋ ธ์ต๋๋ค.
๊ทธ๋์ ์ธ๋ถ์์ CardBundle์ ์ง์ ์ ๊ทผํ๋ ๋์ , Player์๊ฒ ์ ์๋ฅผ ์์ฒญํ๊ณ Player๊ฐ ๋ด๋ถ์ ์ผ๋ก CardBundle์ ์์ํ๋ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ธ๋ถ์์๋ Player์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ ํ์๊ฐ ์์ด์ง๊ณ , ๋์ค์ ์นด๋ ๊ด๋ฆฌ ๋ฐฉ์์ด๋ ์ ์ ๊ณ์ฐ ๋ก์ง์ด ๋ฐ๋๋๋ผ๋ ๋ค๋ฅธ ๋๋ฉ์ธ์ด๋ ๋ ์ด์ด์ ๋ณ๊ฒฝ์ ์ค์ผ ์ ์์ง ์์๊น ์๊ฐํ์ต๋๋ค.
๊ตฌํ์ ์งํํ๋ฉด์ ์ด๋ฐ ๋ฐฉ์์ด ์์ ๋ฉ์๋๋ผ๋ ๊ฐ๋ ๊ณผ๋ ์ฐ๊ฒฐ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
์ฌ์ดํด1 ๋ฆฌ๋ทฐ์์ ์ง์์ ๋ฐ์๊ฐ๋ ์ทจ์ง๋ณด๋ค ์ ์๊ฐ์ด ์๋๋ฅผ ์ค๋ํ ์ ์์์ง์ ์ด์ ์ ๋ง์ถฐ๋ณด๋ผ๋ ๋ง์์ ํด์ฃผ์ จ๋๋ฐ, ์ด๋ฒ์๋ ๊ทธ ์กฐ์ธ์ ๋ ์ฌ๋ฆฌ๋ฉฐ ์ ๋๋ฆ์ ๊ธฐ์ค์ผ๋ก ๊ตฌ์กฐ๋ฅผ ์ ํํด ๋ณด์์ต๋๋ค.
์ ๊ฐ ์ด๋ฐ ๋ฐฉํฅ์ผ๋ก ์ ๊ทผํ ๊ฒ์ด ์ด๋ ์ ๋ ํ๋นํ ๋ฐฉํฅ์ธ์ง, ๋ ์ด๋ฐ ์ํฉ์์ ์ถ๊ฐ๋ก ๊ณ ๋ คํด ๋ณผ ๋งํ ๋ถ๋ถ์ด ์๋์ง๋ ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.
ํ์ ๊ณผ ์์ต ๊ณ์ฐ ์ฑ ์ ๋ถ๋ฐฐ์์ ๊ฒช์ ์ด๋ ค์๋ ์์์ต๋๋ค.
๋ฒ ํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์ ํ์ ๊ฒฐ๊ณผ์ ๋ฒ ํ ๊ธ์ก์ ์ด์ฉํด ์์ต์ ๊ณ์ฐํ๋ ์ฑ ์์ ์ด๋์ ๋์ด์ผ ํ ์ง ๊ณ ๋ฏผ์ด ๋ง์์ต๋๋ค.
์ฒ์์๋ ๊ด๋ จ ์ฑ ์์ Bet ๋๋ฉ์ธ์ ๋ชจ์ผ๋ ค๊ณ ์๊ฐํ์ต๋๋ค. ํ์ง๋ง ๊ตฌํ์ ์งํํ๋ฉด์ ํ์ ๋ก์ง, ํ๋ ์ด์ด ์ํ, ๋ฒ ํ ๊ธ์ก ๋ฑ ์ฌ๋ฌ ๋๋ฉ์ธ์ด ํจ๊ป ๊ด์ฌํ๊ฒ ๋์๊ณ , ์ด๋ ๊ฐ์ฒด์ ์ฑ ์์ ๋๋ ๊ฒ์ด ์์ฐ์ค๋ฌ์ด์ง ํ๋จํ๊ธฐ๊ฐ ์ฝ์ง ์์์ต๋๋ค.
๊ทธ๋์ ์ฌ๋ฌ ๋ฐฉํฅ์ผ๋ก ๊ตฌ์กฐ๋ฅผ ๋ฐ๊ฟ ๋ณด๋ฉด์ ๊ณ์ ์์ ์ ์งํํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ ๊ณผ์ ์์ ํน์ ๊ฐ์ฒด๊ฐ ๋๋ฌด ๋ง์ ์ ๋ณด๋ฅผ ์๊ฒ ๋๋ ๊ตฌ์กฐ๊ฐ ๋๊ธฐ๋ ํ๊ณ , ๋ฐ๋๋ก ์ฑ ์์ด ์ง๋์น๊ฒ ๋ถ์ฐ๋๋ ๋๋๋ ์์์ต๋๋ค.
์ฌ๋ฌ ์๋๋ฅผ ๊ฑฐ์น ๋์ ํ์ฌ ๊ตฌ์กฐ๋ฅผ ์ ํํ๊ฒ ๋์์ง๋ง, ์ด ์ ํ์ด ์ต์ ์ธ์ง์ ๋ํด์๋ ์์ง ํ์ ์ด ์์ง๋ ์์ต๋๋ค.
์๋ฃจ๊ฐ ๋ณด์๊ธฐ์๋ ์ด ๋ฌธ์ ๋ฅผ ๊ณ ๋ฏผํ๋ ๊ณผ์ ์์ ์ ๊ฐ ๋์น๊ณ ์๋ ๋ถ๋ถ์ด ์๋์ง, ํน์ ์ด๋ฐ ์ํฉ์์ ์ฑ ์์ ์์น๋ฅผ ํ๋จํ ๋ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ ๊ทผํ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ง๋ ๋ฆฌ๋ทฐ์์ ์ข์ ํผ๋๋ฐฑ์ ๋ง์ด ๋จ๊ฒจ์ฃผ์ ์ ๊ฐ์ฌํ์ต๋๋ค. ๋จ์ํ ์์ ํ ๋ถ๋ถ์ ์ง์ด์ฃผ์๋ ๊ฒ๋ฟ๋ง ์๋๋ผ, ์ด๋ค ๊ด์ ์์ ๊ณ ๋ฏผํด๋ณด๋ฉด ์ข์์ง๊น์ง ๋ง์ํด์ฃผ์ ์ ์ด๋ฒ ์ฌ์ดํด์ ์งํํ๋ฉด์ ์ฌ๋ฌ ๋ฒ ๋ค์ ๋ ์ฌ๋ฆฌ๊ฒ ๋์์ต๋๋ค. ๋๋ถ์ ์ด๋ฒ์๋ ์ด์ ๋ณด๋ค ์ค๊ณ์ ๋ํด ์กฐ๊ธ ๋ ๊น๊ฒ ๊ณ ๋ฏผํด๋ณด๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค.
์์ง ์ ๊ฐ ๋์น๊ณ ์๋ ๋ถ๋ถ๋ ๋ง์ ๊ฒ ๊ฐ๊ณ , ๋ฐฉํฅ์ด ์์ ํ ๋ง๋์ง์ ๋ํ ํ์ ๋ ๋ถ์กฑํ ์ํ์ด์ง๋ง ๊ทธ๋๋ ๋๋ฆ๋๋ก ์๊ฐํด๋ณธ ๊ณผ์ ๋ค์ ์ ๋ฆฌํด๋ณด์์ต๋๋ค. ์ด๋ฒ์๋ ๋ถ์กฑํ ๋ถ๋ถ์ด ์๋ค๋ฉด ํธํ๊ฒ ๋ง์ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ์ ๋ถํ๋๋ฆฝ๋๋ค.๐